#ifndef __HISTORYSERVICECLIENT_H__
#define __HISTORYSERVICECLIENT_H__


// * 获取数据
#define FUNCTIONID_GETDATA 0
// * 获取代码
#define FUNCTIONID_GETCODE 1
// * 获取复权因子
#define FUNCTIONID_GETDR 2
// * 获取数据2
#define FUNCTIONID_GETDATA2 3
#include "facecat/stdafx.h"
#include "facecat/FCClientService.h"
#include "Security.h"
#include "facecat/SecurityData.h"

/*
 * 历史数据服务
 */
class HistoryServiceClient: public FCClientService{
public:
    int m_socketID;
public:
    HistoryServiceClient();
public:
    HashMap<String, ArrayList<ADJUSTMENTFACTOR*>> m_factors;
    /*
     * 获取套接字
     */
    int getSocketID();
    /*
     * 设置套接字
     *@param value
     */
    void setSocketID(int value);
    /*
     * 请求代码
     *@param requestID 请求ID
     */
    void reqCodes(int requestID);
    /*
     * 请求数据
     *@param request_ID 请求ID
     *@param code 代码
     *@param cycle 周期
     *@param startDate 开始日期
     *@param endDate 结束日期
     */
    void reqData(int requestID, String code, int cycle, int subscription, double startDate, double endDate);
    /*
     * 请求数据
     *@param request_ID
     *@param code
     *@param oldRequestID
     */
    void reqData2(int requestID, String code, int oldRequestID);
    /*
     * 请求复权因子
     */
    void reqDevideDatas(int requestID);
    /*
     * 获取数据
     *@param code 代码
     *@param cycle 周期
     *@param startDate 开始日期
     *@param endDate 结束日期
     *@param nowDate 当前日期
     *@param nowVolume 当前成交量
     *@param nowAmount 当前成交额
     *@param body 包体
     *@param bodyLength 包体长度
     */
    static ArrayList<SecurityData> getDatas(String *code, int *cycle,  double *startDate,  double *endDate,  int *subscription, double *nowDate,  double *nowVolume,  double *nowAmount, char* body, int bodyLength);
    static void getDatas2(String *code, ArrayList<SecurityData> *dayDatas, ArrayList<SecurityData> *minuteDatas, ArrayList<SecurityData> *trendDatas, char* body, int bodyLength);
    /*
     * 获取代码
     *param body 包体
     *param bodyLength 包头长度
     */
    static ArrayList<Security*> getCodes(char* body, int bodyLength);
    /*
     * 解析复权因子
     *@param body
     *@param bodyLength
     */
    HashMap<String, ArrayList<ADJUSTMENTFACTOR*>> getFactors(char* body, int bodyLength);
    /*
     * 接受消息方法
     */
    virtual void onReceive(FCMessage *message);
};

#endif
